<?php
namespace backend\logic\obj;

use backend\models\CostInfo;
use backend\models\MeterReading;
use backend\models\Tenement;
use Yii;

/**
 * 房东与租户签订合同的对象，
 * 简称，合同对象
 */
class Contract
{
    public $uid; //房东uid
    public $tenement_uid; //租户uid
    public $tenement_name; //租户名称
    public $tenement_phone; //租户手机号码
    public $tenement_sex; //租户性别
    public $tenement_identity; //'租户身份证号码'
    public $rent; //租金',
    public $cash_pledge; //'合约押金',
    public $pay_way; //'压几付几  例如   1,3 表示压一付三',
    public $cost_ids; //费用对象
    public $meter_reading; //抄表信息集合
    public $inform_days; //提前收租的天数
    public $next_time; //下次收租的日期
    public $start_time; //合同开始时间
    public $end_time; //合同截至日期,

    protected static $instance;

    public static function getInstance($config = [])
    {
        self::$instance || self::$instance = new self($config);
        return self::$instance;
    }
    /**
     * 创建合同
     *
     * @access public
     * @return array 返回类型
     */
    public static function createContract($data)
    {
        $instance = self::getInstance();

        $instance->createInit($data);

        $instance->createTenement();

        return $instance->create();

    }
    protected function create()
    {
        return \backend\models\Contract::addContract(get_object_vars($this));
    }

    /**
    * 创建租户
    *
    * @access public
    * @param mixed $arg1 参数一的说明
    * @param mixed $mixed 这是一个混合类型
    * @return array 返回类型
    */
    public function createTenement()
    {
        $data = [
          'names'=> $this->tenement_name,
          'phone'=> $this->tenement_phone,
          'identity'=> $this->tenement_identity,
          'sex'=> $this->tenement_sex,
          'type'=> 0,
          'status'=> 1,
        ];
        $res =  Tenement::addTenement($data);
        if($res){
            $this->tenement_uid = $res;
            return true;
        }
        return false;
    }
    /**
     * 创建合同初始化个属性值
     *
     * @access public
     * @param mixed $arg1 参数一的说明
     * @param mixed $mixed 这是一个混合类型
     * @return array 返回类型
     */
    protected function createInit($data)
    {
        $this->objInti($data);

        $this->processCostId();

        $this->processMeterReading();

        $this->timeFormat();
    }
    /**
     *  初始化对象所有属性值
     *
     * @access public
     * @param mixed $arg1 参数一的说明
     * @param mixed $mixed 这是一个混合类型
     * @return array 返回类型
     */
    protected function objInti($data)
    {
        foreach($this as $k=>$v){
            isset($data[$k]) && $this->$k = $data[$k];
        }
    }

    /**
     * 加工cost_ids的属性
     *
     * @access public
     * @param mixed $arg1 参数一的说明
     * @param mixed $mixed 这是一个混合类型
     * @return array 返回类型
     */
    protected function processCostId()
    {
        $arr = [];
        $info = $this->cost_ids;
        //套房独有费用清单
        if (!empty($info) && is_array($info)) {
            foreach ($info as $k => $v) {
                isset($v['cost_data']) && $v['cost_data'] = json_encode($v['cost_data']);
                $arr[] = CostInfo::insertCost($v);
            }
            $this->cost_ids = json_encode($arr);
        }
    }

    /**
    * 抄表
    *
    * @access public
    * @param mixed $arg1 参数一的说明
    * @param mixed $mixed 这是一个混合类型
    * @return array 返回类型
    */
    public function processMeterReading()
    {
        $arr = [];
        $info = $this->meter_reading;
        $times = time();
        //套房独有费用清单
        if (!empty($info) && is_array($info)) {
            foreach ($info as $k => $v) {
                $v['source_type'] = 0;
                $v['times'] = $times;
                $arr[] = MeterReading::addMeterReading($v);
            }
            $this->meter_reading = json_encode($arr);
        }
    }

    protected function timeFormat()
    {
        $this->next_time = strtotime($this->next_time);
        $this->start_time = strtotime($this->start_time);
        $this->end_time = strtotime($this->end_time);
    }
}